GITLAB <> GITHUB 작업
NOTE
내부망 전용 GitLab과 외부(집) 작업 환경을 분리 운영하기 위해, GitHub를 작업 기준(Source of Truth)으로 삼고 GitLab은 반영/CI/Merge 전용으로 쓰는 전략 정리. Git CLI 명령 위주라 GitLab 버전에 종속적인 내용은 없다.
1. 배경 / 문제 상황
- 회사 GitLab은 내부망 전용 — 집에서는 GitLab 접근 불가
- fork 불가, mirror 사용 시 운영 복잡도 급상승
해결 목표: 집/회사 어디서든 작업 가능 + GitLab은 안정적으로 반영
2. 최종 운영 전략 (결론)
- GitHub = 개발 및 작업 기준(Source of Truth)
- GitLab = 결과 반영 / CI / Merge 전용
GitHub에서 작업 → GitLab에 반영
GitLab에 직접 접근할 수 없는 환경(집)에서도 작업을 이어갈 수 있게 하면서, 회사에서만 GitLab에 반영하는 식으로 “작업 위치”와 “반영 위치”를 분리한 것이 핵심이다. 두 원격 저장소를 mirror나 fork로 자동 동기화하지 않는 이유는, 그럴 경우 어느 쪽이 진짜 최신 상태인지 애매해지고 충돌 해결이 더 복잡해지기 때문이다(운영 복잡도 급상승 문제).
3. Remote 구성
로컬 저장소 기준으로 origin을 하나만 두지 않고, 두 개의 remote를 등록해 push 대상만 선택하는 방식을 쓴다.
github → https://github.com/ORG/REPO.git (작업 기준)
gitlab → http://gitlab.internal/ORG/REPO.git (회사 반영)- remote 주소를 바꾸지 않는다 (
set-url금지) - push 대상만 선택한다 (
git push github .../git push gitlab ...)
4. 브랜치 운영 원칙
브랜치 네이밍
feature/*
refactor/*
hotfix/*
예시: refactor/log
GitLab에도 동일 브랜치를 미리 생성
- 기준:
main - 목적: 실수 방지 / CI 분리 / 리뷰 준비
5. 기본 작업 흐름
5.1 집 (GitHub에서 작업)
git checkout refactor/log
# 작업
git commit -m "Refactor log interceptor"
git push github refactor/log5.2 회사 (GitHub → GitLab 반영)
git fetch github
git checkout refactor/log
git push gitlab refactor/log- 브랜치 통째로 반영 (커밋 SHA 동일, force/merge 없음) — 커밋 SHA가 같아야 두 원격 저장소의 히스토리가 벌어지지 않고 나중에 비교/추적이 가능하다.
5.3 반복 작업
- GitHub에 커밋 추가 → 동일 브랜치로 GitLab에 다시 push
- Git은 변경분만 전송하므로 반복 push의 비용은 크지 않다.
6. GitLab Merge 정책
- 대상:
refactor/log → main - 방식: Squash merge (권장) 또는 Rebase & merge
- 결과: 기존 파일 유지, 추가/수정/삭제된 부분만 반영
Squash merge를 권장하는 이유는, 집/회사를 오가며 쌓인 자잘한 중간 커밋(오타 수정, WIP 등)을 하나의 의미 있는 커밋으로 합쳐 main의 히스토리를 깔끔하게 유지하기 위해서다.
7. 중요한 운영 규칙 (필수)
7.1 Source of Truth 단일화
- GitHub 기준으로만 작업하고, GitLab에서는 직접 작업하지 않는다.
7.2 작업 전 필수
git fetch github
git rebase github/refactor/logGitLab에서 실수로 직접 커밋이 생기면 두 원격 저장소의 히스토리가 갈라지므로, 매 작업 전 GitHub 기준으로 rebase해 항상 하나의 기준선을 유지한다.
8. 하지 말아야 할 것
- mirror 사용
- fork 강제
- GitLab main 직접 push
- remote 주소 변경 (
set-url) - 양쪽에서 무작위 커밋
이 항목들은 모두 “GitHub가 유일한 작업 기준”이라는 원칙을 깨뜨려 두 저장소의 히스토리가 갈라지게 만드는 행동이라는 공통점이 있다.
9. 이 구조의 장점
- 내부망 / 외부망 분리 문제 해결
- 히스토리 안정, 충돌 최소화
- CI / 리뷰 분리
- 장기 리팩토링에 최적
10. 한 줄 요약
GitHub를 작업 기준으로 삼고, GitLab은 반영 및 검증용으로만 사용한다. 브랜치 단위로 그대로 push 후 merge한다.